今天原本想做LSTM模型來預測籌碼資訊,但突然想到一個更想做的,
基於昨天subaru219這位朋友的提點,我也去嘗試了一下,
這是用台積電2019年6月~2024年6月(如下圖)
valid = data[train_data_len:].copy() # 使用.copy() 才不會動用到原本的資料
valid['Predictions'] = predictions
# 起始資金10萬
initial_cash = 100000
cash = initial_cash
stock = 0
valid['Cash'] = cash
valid['Stock'] = stock
valid['Total Value'] = cash
這個策略的交易邏輯是這樣的:
一、買入操作:
如果模型預測的下一天股價
> 當天的收盤價
,就 all in 買進股票。
二、賣出操作:
如果模型預測的下一天股價
< 當天的收盤價
,就直接全部賣掉。
# 結合預測結果的交易策略
for i in range(1, len(valid)):
if valid['Predictions'].iloc[i] > valid['Close'].iloc[i-1]:
# 買進,每次都all in
stock = cash / valid['Close'].iloc[i]
cash = 0
elif valid['Predictions'].iloc[i] < valid['Close'].iloc[i-1]:
# 賣出,每次都全部清倉
cash = stock * valid['Close'].iloc[i]
stock = 0
valid.loc[valid.index[i], 'Cash'] = cash
valid.loc[valid.index[i], 'Stock'] = stock
valid.loc[valid.index[i], 'Total Value'] = cash + stock * valid['Close'].iloc[i]
# 最終報酬
final_value = valid['Total Value'].iloc[-1]
print(f"Initial Cash: ${initial_cash}")
print(f"Final Portfolio Value: ${final_value}")
print(f"Total Return: {(final_value - initial_cash) / initial_cash * 100:.2f}%")
Initial Cash: $100000
Final Portfolio Value: $0
Total Return: -100.00%
這結果慘得令人心疼XDDDD 一定是交易策略不好,不然就是我哪裡寫錯了 :)
# 回測的结果把它視覺化
plt.figure(figsize=(16,8))
plt.title('Trading Strategy Backtest')
plt.xlabel('Date', fontsize=18)
plt.ylabel('Portfolio Value USD ($)', fontsize=18)
plt.plot(valid['Total Value'])
plt.legend(['Portfolio Value'], loc='lower right')
plt.show()
看有買進的地方,但是績效卻沒動,看來是哪裡有點問題,這邊就交給廣大觀眾們去解謎吧!
(自己也在解謎中)
其實後面我還有把前面的雙均線策略拿過來這邊進行結合,但是debug結果需要一點時間,
若還有時間,之後可以在這邊看到它後續的更新~
各位回見~
這邊有一點點小小的完賽心得想跟大家分享一下,其實全部寫完沒有太多的激動,
就是有一種一開始就相信自己可以完成的感覺!
雖然平時有讀書的習慣,但是除了做研究以外,
多了一個要寫文章的任務,還是對生活的安排產生了一些影響~
責任感倒是提醒著我不要忘記發文,而且這個規則是要求連續
30天,
昨天因為差一點點,要是沒記起來,前面28天的努力就要明年再挑戰一次了。
這一個月以來有你們的陪伴,讓我有動力完成每天的文章。
要是想認識我,可以直接用這個帳號的名稱去搜尋,歡迎來交朋友~
要討論 IT 或是討論 Finance 我都可以,未來有緣再見!
再次謝謝看到這裡的每一位。
也很感謝我的朋友邀請我來參加鐵人賽,讓我知道原來自己也可以辦得到!
每日記錄:
加權指數收在22268.09點,上漲66.24點。
祝各位前程似錦,生活幸福~